package org.acb.sgp.managedbeans;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import org.acb.sgp.beans.Actor;
import org.acb.sgp.beans.DetalleItem;
import org.acb.sgp.beans.DetallePresupuesto;
import org.acb.sgp.beans.Episodio;
import org.acb.sgp.beans.Escena;
import org.acb.sgp.beans.Estado;
import org.acb.sgp.beans.GuionTecnico;
import org.acb.sgp.beans.ImagenLocacion;
import org.acb.sgp.beans.Presupuesto;
import org.acb.sgp.beans.Utileria;
import org.acb.sgp.beans.Vestuario;
import org.acb.sgp.service.BusinessLayerService;
import org.acb.sgp.service.impl.BusinessLayerServiceImpl;
import org.acb.sgp.utils.FacesUtil;

@ManagedBean
@ViewScoped
public class PerfilEpisodioBean implements Serializable {

	private static final long serialVersionUID = 1L;
	private final BusinessLayerService service = new BusinessLayerServiceImpl();
    private Integer codigo;
    private Episodio episodio;
    private GuionTecnico guionTecnico;
    private List<Escena> escenas;
    private Escena escena;
    private List<ImagenLocacion> imagenes;
    private List<Actor> actores;
    private List<Utileria> utilerias;
    private List<Vestuario> vestuarios;
    private Presupuesto presupuesto;
    private List<DetallePresupuesto> detallesPresupuesto;
    private DetallePresupuesto detallePresupuesto;
    private List<DetalleItem> detallesItem;
    private DetalleItem detalleItem;
    private String opcion;
    private String menu;

    public void seleccionar() {
        // inicializando atributos
        escena = new Escena();
        imagenes = new ArrayList<ImagenLocacion>();
        actores = new ArrayList<Actor>();
        utilerias = new ArrayList<Utileria>();
        vestuarios = new ArrayList<Vestuario>();
        presupuesto = new Presupuesto();
        detallePresupuesto = new DetallePresupuesto();
        detalleItem = new DetalleItem();
        detallesPresupuesto = new ArrayList<DetallePresupuesto>();
        detallesItem = new ArrayList<DetalleItem>();

        // dando valores ya establecidos
        episodio = service.buscarEpisodioPorCodigo(codigo);
        guionTecnico = service.buscarGuionTecnicoPorEpisodioPrograma(codigo, episodio.getPrograma().getCodPrograma());
        escenas = service.buscarEscenasPorEpisodioPrograma(codigo, episodio.getPrograma().getCodPrograma());
        menu = "GT";
    }

    public void nuevo() {
        escena = new Escena();
    }

    public void registrar() {
        escena.setEpisodio(episodio);
        escena.setPrograma(episodio.getPrograma());
        Estado estado = new Estado();
        estado.setCodEstado(1);
        escena.setEstado(estado);
        service.registrarEscena(escena);
        escenas = service.buscarEscenasPorEpisodioPrograma(codigo, episodio.getPrograma().getCodPrograma());
        FacesUtil.closeDialog("registrar");
        FacesUtil.showMessage("ESCENA GUARDADA", FacesUtil.INFO);
    }

    public void eliminar(Escena pEscena) {

    }

    public void verDetalles() {
        opcion = "L";
        imagenes = service.listaImagenesPorCodLocacion(escena.getLocacion().getCodLocacion());
        actores = service.buscarActoresPorCodEscena(escena.getCodEscena());
        Utileria u = new Utileria();
        u.setNomUtileria("SOMBRERO");
        u.getCategoria().setNomCategoria("VESTIDO");
        u.getEstado().setNomEstado("MAL ESTADO");
        u.getColor().setNomColor("AZUL");
        utilerias.add(u);
        Vestuario v = new Vestuario();
        v.setNomVestuario("CAMISA BLANCA Y PANTALON NEGRO");
        vestuarios.add(v);
    }

    public void verPresupuesto() {
        presupuesto = service.buscarPresupuestoPorEpisodio(codigo);
        if (presupuesto == null) {
            FacesUtil.openDialog("registrarPresupuesto");
        } else {
            menu = "P";
            detallesPresupuesto = service.buscarDetallesPorCodPresupuesto(codigo);
        }
    }

    public void generarPresupuesto() {
        presupuesto = new Presupuesto();
        presupuesto.setEpisodio(episodio);
        presupuesto.setPrograma(episodio.getPrograma());
        Estado estado = new Estado();
        estado.setCodEstado(1);
        presupuesto.setEstado(estado);
        service.registrarPresupuesto(presupuesto);
        FacesUtil.closeDialog("registrarPresupuesto");
        verPresupuesto();
    }

    public void nuevoDetalle() {
        detallePresupuesto = new DetallePresupuesto();
    }

    public void registrarDetalle() {
        detallePresupuesto.setEpisodio(episodio);
        service.registrarDetallePresupuesto(detallePresupuesto);
        FacesUtil.closeDialog("registrarDetalle");
        FacesUtil.showMessage("DETALLE GUARDADO", FacesUtil.INFO);
        detallesPresupuesto = service.buscarDetallesPorCodPresupuesto(codigo);
    }

    public void verItemsDetalle() {
        detallesItem = service.buscarItemsPorCodDetalle(detallePresupuesto.getCodDetalle());
    }

    public void eliminarDetalle(DetallePresupuesto pDetallePresupuesto) {
        service.eliminarDetallePresupuesto(pDetallePresupuesto);
        FacesUtil.showMessage("DETALLE ELIMINADO", FacesUtil.INFO);
        detallesPresupuesto = service.buscarDetallesPorCodPresupuesto(codigo);
    }

    public void nuevoItem() {
        detalleItem = new DetalleItem();
    }

    public void registrarItem() {
        detalleItem.setNumItem(0);
        detalleItem.setDetalle(detallePresupuesto);
        service.registrarDetalleItem(detalleItem);
        FacesUtil.closeDialog("registrarItem");
        FacesUtil.showMessage("ITEM GUARDADO", FacesUtil.INFO);
        detallesItem = service.buscarItemsPorCodDetalle(detallePresupuesto.getCodDetalle());
        detallesPresupuesto = service.buscarDetallesPorCodPresupuesto(codigo);
    }

    public void eliminarItem() {
        service.eliminarDetalleItem(detalleItem);
        detallesItem = service.buscarItemsPorCodDetalle(detallePresupuesto.getCodDetalle());
        detallesPresupuesto = service.buscarDetallesPorCodPresupuesto(codigo);
    }

    public Double getTotalMonto(DetallePresupuesto pDetallePresupuesto) {
        List<DetalleItem> dis = service.buscarItemsPorCodDetalle(pDetallePresupuesto.getCodDetalle());
        Double monto = 0.0;
        for (DetalleItem di : dis) {
            monto += di.getNumMonto();
        }
        return monto;
    }

    public Double getTotalNeto() {
        Double total = 0.0;
        for (DetallePresupuesto dp : detallesPresupuesto) {
            List<DetalleItem> dis = service.buscarItemsPorCodDetalle(dp.getCodDetalle());
            Double monto = 0.0;
            for (DetalleItem di : dis) {
                monto += di.getNumMonto();
            }
            total += monto;
        }
        return total;
    }

    public String getNombreImagen(ImagenLocacion il) {
        return il.getCodImagen() + "." + (il.getNomImagen().substring(il.getNomImagen().length() - 3));
    }

    public Integer getCodigo() {
        return codigo;
    }

    public void setCodigo(Integer codigo) {
        this.codigo = codigo;
    }

    public Episodio getEpisodio() {
        return episodio;
    }

    public void setEpisodio(Episodio episodio) {
        this.episodio = episodio;
    }

    public GuionTecnico getGuionTecnico() {
        return guionTecnico;
    }

    public void setGuionTecnico(GuionTecnico guionTecnico) {
        this.guionTecnico = guionTecnico;
    }

    public List<Escena> getEscenas() {
        return escenas;
    }

    public void setEscenas(List<Escena> escenas) {
        this.escenas = escenas;
    }

    public Escena getEscena() {
        return escena;
    }

    public void setEscena(Escena escena) {
        this.escena = escena;
    }

    public List<ImagenLocacion> getImagenes() {
        return imagenes;
    }

    public void setImagenes(List<ImagenLocacion> imagenes) {
        this.imagenes = imagenes;
    }

    public String getOpcion() {
        return opcion;
    }

    public void setOpcion(String opcion) {
        this.opcion = opcion;
    }

    public List<Actor> getActores() {
        return actores;
    }

    public void setActores(List<Actor> actores) {
        this.actores = actores;
    }

    public List<Utileria> getUtilerias() {
        return utilerias;
    }

    public void setUtilerias(List<Utileria> utilerias) {
        this.utilerias = utilerias;
    }

    public List<Vestuario> getVestuarios() {
        return vestuarios;
    }

    public void setVestuarios(List<Vestuario> vestuarios) {
        this.vestuarios = vestuarios;
    }

    public String getMenu() {
        return menu;
    }

    public void setMenu(String menu) {
        this.menu = menu;
    }

    public Presupuesto getPresupuesto() {
        return presupuesto;
    }

    public void setPresupuesto(Presupuesto presupuesto) {
        this.presupuesto = presupuesto;
    }

    public List<DetallePresupuesto> getDetallesPresupuesto() {
        return detallesPresupuesto;
    }

    public void setDetallesPresupuesto(List<DetallePresupuesto> detallesPresupuesto) {
        this.detallesPresupuesto = detallesPresupuesto;
    }

    public DetallePresupuesto getDetallePresupuesto() {
        return detallePresupuesto;
    }

    public void setDetallePresupuesto(DetallePresupuesto detallePresupuesto) {
        this.detallePresupuesto = detallePresupuesto;
    }

    public List<DetalleItem> getDetallesItem() {
        return detallesItem;
    }

    public void setDetallesItem(List<DetalleItem> detallesItem) {
        this.detallesItem = detallesItem;
    }

    public DetalleItem getDetalleItem() {
        return detalleItem;
    }

    public void setDetalleItem(DetalleItem detalleItem) {
        this.detalleItem = detalleItem;
    }
}
